home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
program
/
pxbud.zip
/
PDXTBL.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1991-05-17
|
6KB
|
235 lines
/*┌───────────────────────────────────────────────────────────────────────┐
│ │
│ Module: PDXTBL.CPP │
│ Author: Rick Kligman │
│ Purpose: Code for Base Class table which handles Paradox Engine │
│ Database stuff │
│ Last Modified: 05-17-91 00:34am │
│ │
│ Copyright 1991 Rick Kligman │
│ This code may be freely used and distributed in commercial apps │
│ provided some mention of PXBuddy++ is made in the documentation. │
│ │
│ Version 1.00 │
└───────────────────────────────────────────────────────────────────────┘ */
#include "pdxtbl.h"
// ╓───────────────────────────────────────────────────────────────╖
// ║ Constructor for pxtable class ║
// ╚═══════════════════════════════════════════════════════════════╝
pxtable::pxtable()
{
first_open = 1; // this will be first time table is opened
tbl_open = 0; // table is not open
blanks_as_zeros = TRUE; // write blanks as zeros
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Destructor for pxtable class ║
// ╚═══════════════════════════════════════════════════════════════╝
pxtable::~pxtable()
{
if ( ! first_open )
delete fldptr;
if ( tbl_open )
PXTblClose(th);
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Open a Table ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::open(char *tablename, FIELDHANDLE fh)
{
int err;
if ( *tablename != NULL) {
strcpy(tblname, tablename);
if (! first_open)
delete fldptr;
first_open = 1;
}
err = PXTblOpen(tblname, &th, fh, 0);
CKERR;
err = PXRecBufOpen(th, &rh);
if ( ! err ) {
err = PXRecBufEmpty(rh);
if ( ! err )
if ( first_open ) {
err = PXRecNFlds(th, &numflds);
if ( ! err ) {
fldptr = new absfld * [numflds + 1];
first_open = 0;
init_flds();
PXKeyNFlds(th, &keyed); // determine if table is keyed
}
}
}
if ( err )
PXTblClose(th);
else
tbl_open = 1; // table is now open
return err; // will be PXSUCCESS if everything is OK
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Close a Table ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::close()
{
int err;
err = PXRecBufClose(rh);
CKERR;
err = PXTblClose(th);
if ( ! err )
tbl_open = 0; // table is now closed
return err;
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Read the record and then ALL fields in a Table ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::read_rec()
{
int err;
err = recget();
CKERR;
err = read_flds();
return err;
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Read ALL fields in a Table ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::read_flds()
{
int err;
for (int i = 0; fldptr [i] != NULL; i++) {
err = fldptr [i]->get();
CKERR;
}
return (PXSUCCESS);
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Write ALL fields in a Table and then the record ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::put_recupdate()
{
int err;
err = put_flds();
CKERR;
err = recupdate();
return err;
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Write ALL fields in a Table and then the record ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::put_recappend()
{
int err;
err = put_flds();
CKERR;
err = recappend();
return err;
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Write ALL fields in a Table and then the record ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::put_recinsert()
{
int err;
err = put_flds();
CKERR;
err = recinsert();
return err;
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Write ALL fields in a Table ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::put_flds()
{
int err;
for (int i = 0; fldptr [i] != NULL; i++) {
err = fldptr [i]->put();
CKERR;
}
return (PXSUCCESS);
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Get Next Record in the Table ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::recnext()
{
int err;
err = PXRecNext(th);
if ( err == PXERR_ENDOFTABLE ) {
err = PXSUCCESS;
tblmarker = TRUE;
}
else
tblmarker = FALSE;
return err;
}
// ╓───────────────────────────────────────────────────────────────╖
// ║ Get Prev Record in the Table ║
// ╚═══════════════════════════════════════════════════════════════╝
int pxtable::recprev()
{
int err;
err = PXRecPrev(th);
if ( err == PXERR_STARTOFTABLE ) {
err = PXSUCCESS;
tblmarker = TRUE;
}
else
tblmarker = FALSE;
return err;
}